home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / share / tails-greeter / community-greeter.py next >
Encoding:
Python Source  |  2013-01-10  |  6.1 KB  |  177 lines

  1. #!/usr/bin/python
  2. #
  3. # Copyright 2012 Tails developers <tails@boum.org>
  4. # Copyright 2011 Max <govnototalitarizm@gmail.com>
  5. # Copyright 2011 Martin Owens
  6. #
  7. # This program is free software: you can redistribute it and/or modify
  8. #  it under the terms of the GNU General Public License as published by
  9. #  the Free Software Foundation, either version 3 of the License, or
  10. #  (at your option) any later version.
  11. #
  12. #  This program is distributed in the hope that it will be useful,
  13. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. #  GNU General Public License for more details.
  16. #
  17. #  You should have received a copy of the GNU General Public License
  18. #  along with this program.  If not, see <http://www.gnu.org/licenses/>
  19. #
  20. """
  21. GDM greeter for Tails project using gtk
  22. """
  23.  
  24. import logging, logging.config
  25. import gtk, sys, os
  26.  
  27. from gtk import gdk
  28.  
  29. def print_log_record_on_error(func):
  30.     """Wrapper to determine failed logging instance"""
  31.     def wrap(self, *args, **kwargs):
  32.         """internal logging wrapper"""
  33.         try:
  34.             return func(self, *args, **kwargs)
  35.         except:
  36.             print >> sys.stderr, "Failed log message=%r with args=%r " % (getattr(self, 'msg', '?'), getattr(self, 'args', '?'))
  37.             raise
  38.     return wrap
  39.  
  40. logging.config.fileConfig('tails-logging.conf')
  41. logging.LogRecord.getMessage = print_log_record_on_error(logging.LogRecord.getMessage)
  42.  
  43. from pipes import quote
  44.  
  45. import GdmGreeter.config
  46. import GdmGreeter.rootaccess
  47. import GdmGreeter.camouflage
  48. import GdmGreeter.persistence
  49.  
  50. from GdmGreeter.services import GdmGreeterService
  51. from GdmGreeter.language import TranslatableWindow
  52. from GdmGreeter.langpanel import LangPanel
  53. from GdmGreeter.persistencewindow import PersistenceWindow
  54. from GdmGreeter.optionswindow import OptionsWindow
  55. from GdmGreeter import GLADE_DIR, __appname__
  56.  
  57. class CommunityGreeterApp(GdmGreeterService):
  58.     """Tails greeter main controller
  59.  
  60.     This class is the greeter dbus service"""
  61.  
  62.     app_name  = __appname__
  63.     glade_dir = GLADE_DIR
  64.  
  65.     def __init__(self, *args, **kwargs):
  66.         GdmGreeterService.__init__(self)
  67.         self.scr = gdk.display_get_default().get_screen(self.display.number)
  68.         self.language = 'en_US.UTF-8'
  69.         self.session = None
  70.         self.forced = False
  71.         self.layout = None
  72.         self.postponed = False
  73.         self.postponed_text = None
  74.         self.ready = False
  75.         self.translated = False
  76.         self.persistence = GdmGreeter.persistence.PersistenceSettings()
  77.         self._loaded_windows = []
  78.         self.localisationsettings = GdmGreeter.language.LocalisationSettings(self)
  79.         self.langpanel = self.load_window(LangPanel, self)
  80.         self.persistencewindow = self.load_window(PersistenceWindow, self)
  81.         self.optionswindow = self.load_window(OptionsWindow, self)
  82.         self.rootaccess = GdmGreeter.rootaccess.RootAccessSettings()
  83.         self.camouflage = GdmGreeter.camouflage.CamouflageSettings()
  84.  
  85.     def load_window(self, window_class, *args, **kwargs):
  86.         """When loading a window, also translate it"""
  87.         window = window_class(*args, **kwargs)
  88.         self._loaded_windows.append(window)
  89.         if isinstance(window, TranslatableWindow) and self.language:
  90.             window.translate_to(self.language.split('_')[0])
  91.         return window
  92.  
  93.     def translate_to(self, lang):
  94.         """Translate all windows to target language"""
  95.         logging.debug("translating to %s" % lang)
  96.         if self.ready:
  97.             self.language = lang
  98.         for window in self._loaded_windows:
  99.             if isinstance(window, TranslatableWindow):
  100.                 logging.debug("translating %s to %s" % (window, lang))
  101.                 window.translate_to(lang)
  102.  
  103.     def login(self):
  104.         """Login GDM to the server"""
  105.         # XXX: check that we already sent the username?
  106.         self.obj.AnswerQuery(GdmGreeter.config.LPASSWORD)
  107.  
  108.     def Ready(self):
  109.         """Server is ready"""
  110.         self.langpanel.window.show()
  111.         self.persistencewindow.window.show()
  112.         GdmGreeterService.Ready(self)
  113.         self.ready = True
  114.         logging.warn("greeter is ready.")
  115.  
  116.     def SelectLanguage(self, lang):
  117.         """The user wants to change languages"""
  118.         # Translate all windows in the login screen
  119.         self.translate_to(lang)
  120.         # Apply chosen language
  121.         GdmGreeterService.SelectLanguage(self, lang)
  122.  
  123.     def SelectLayout(self, layout):
  124.         """The user wants to change layout"""
  125.         # Apply chosen layout
  126.         GdmGreeterService.SelectLayout(self, layout)
  127.  
  128.     def DefaultLanguageNameChanged(self, lang):
  129.         """default language name changed"""
  130.         logging.debug('DefaultLanguageNameChanged to %s', lang)
  131.         self.language = lang
  132.  
  133.     def DefaultLayoutNameChanged(self, layout):
  134.         """default layout name changed"""
  135.         logging.debug('DefaultLayoutNameChanged to %s', layout)
  136.         self.layout = str(layout)
  137.  
  138.     def DefaultSessionNameChanged(self, session):
  139.         """default session name changed"""
  140.         logging.debug('DefaultSessionNameChanged to %s', session)
  141.         self.session = str(session)
  142.  
  143.     def InfoQuery(self, text):
  144.         """Server wants to ask the user for something"""
  145.         # XXX: I think that server actually wants username
  146.         logging.debug("got infoquery: %s", text)
  147.         self.obj.AnswerQuery(GdmGreeter.config.LUSER)
  148.  
  149.     def SecretInfoQuery(self, text):
  150.         """Server wants to ask for some secret info"""
  151.         # XXX
  152.         if self.forced:
  153.             self.obj.AnswerQuery(GdmGreeter.config.LPASSWORD)
  154.         else:
  155.             # XXX
  156.             logging.debug('got SecretInfoQuery: %s', text)
  157.  
  158.     def ForcedLogin(self):
  159.         """Immediate login"""
  160.         # XXX
  161.         logging.debug('forced login: skipping all widgets...')
  162.         self.forced = True
  163.         self.obj.SelectLanguage('en_US.UTF-8')
  164.         if self.postponed:
  165.             self.obj.AnswerQuery(GdmGreeter.config.LUSER)
  166.  
  167.     def FinishProcess(self):
  168.         """We're done, quit gtk app"""
  169.         logging.info("Finished.")
  170.         gtk.main_quit()
  171.  
  172. if __name__ == "__main__":
  173.     logging.info("Started.")
  174.     app = CommunityGreeterApp()
  175.     gtk.main()
  176.  
  177.